package com.xiaoran.book.testDemo;

import com.xiaoran.book.entity.ComparisonOperatorEntity;
import com.xiaoran.book.entity.Order;
import com.xiaoran.book.entity.Student;
import org.drools.core.base.RuleNameEqualsAgendaFilter;
import org.junit.Test;
import org.kie.api.KieServices;
import org.kie.api.runtime.KieContainer;
import org.kie.api.runtime.KieSession;
import org.kie.api.runtime.rule.QueryResults;

import java.util.ArrayList;
import java.util.List;

public class TestDemo1 {

    @Test
    public void test1() {
        KieServices kieServices = KieServices.Factory.get();
        KieContainer kieContainer = kieServices.getKieClasspathContainer();
        KieSession kieSession = kieContainer.newKieSession();
        Order order = new Order();
        order.setOriginalPrice(80D);
        kieSession.insert(order);
        kieSession.fireAllRules();
        kieSession.dispose();
        System.out.println("优惠前原始价格：" + order.getOriginalPrice() + "，优惠后价格：" + order.getRealPrice());
    }

    //测试比较操作符
    @Test
    public void test3() {
        KieServices kieServices = KieServices.Factory.get();
        KieContainer kieClasspathContainer = kieServices.getKieClasspathContainer();
        KieSession kieSession = kieClasspathContainer.newKieSession();

        ComparisonOperatorEntity comparisonOperatorEntity = new ComparisonOperatorEntity();
        comparisonOperatorEntity.setNames("张三");
        //将数据提供给规则引擎，规则引擎会根据提供的数据进行规则匹配，如果规则匹配成功则执行规则
        kieSession.insert(comparisonOperatorEntity);
        kieSession.fireAllRules();
        kieSession.dispose();
    }

    @Test
    public void test4() {
        KieServices kieServices = KieServices.Factory.get();
        KieContainer kieClasspathContainer = kieServices.getKieClasspathContainer();
        KieSession kieSession = kieClasspathContainer.newKieSession();

        Student student = new Student();
        student.setAge(25);

        //将数据提供给规则引擎，规则引擎会根据提供的数据进行规则匹配，如果规则匹配成功则执行规则
        kieSession.insert(student);

        kieSession.fireAllRules();
        kieSession.dispose();
    }


    @Test
    public void test5() {
        KieServices kieServices = KieServices.Factory.get();
        KieContainer kieClasspathContainer = kieServices.getKieClasspathContainer();
        KieSession kieSession = kieClasspathContainer.newKieSession();

        Student student = new Student();
        student.setAge(25);

//        kieSession.getAgenda().getAgendaGroup("mygroup").setFocus();
        //将数据提供给规则引擎，规则引擎会根据提供的数据进行规则匹配，如果规则匹配成功则执行规则
        kieSession.insert(student);

        kieSession.fireAllRules();
        kieSession.dispose();
    }


    @Test
    public void test6() throws InterruptedException {

        KieServices kieServices = KieServices.Factory.get();
        KieContainer kieClasspathContainer = kieServices.getKieClasspathContainer();
        KieSession kieSession = kieClasspathContainer.newKieSession();
        new Thread(() -> {
            kieSession.fireUntilHalt();
        }).start();

        Thread.sleep(10000);
        kieSession.halt();
        kieSession.dispose();
    }

    @Test
    public void test7() throws InterruptedException {
        System.setProperty("drools.dateformat", "yyyy-MM-dd HH:mm");

        KieServices kieServices = KieServices.Factory.get();
        KieContainer kieClasspathContainer = kieServices.getKieClasspathContainer();
        KieSession kieSession = kieClasspathContainer.newKieSession();
        kieSession.fireAllRules();
        kieSession.dispose();
    }

    @Test
    public void test8() throws InterruptedException {
        System.setProperty("drools.dateformat", "yyyy-MM-dd HH:mm");
        KieServices kieServices = KieServices.Factory.get();
        KieContainer kieClasspathContainer = kieServices.getKieClasspathContainer();
        KieSession kieSession = kieClasspathContainer.newKieSession();
        kieSession.setGlobal("count", 5);
        ArrayList<String> list = new ArrayList<>();
        list.add("小花");
        kieSession.setGlobal("gList", list);
        kieSession.fireAllRules();
        kieSession.dispose();
    }

    @Test
    public void test9() throws InterruptedException {
        System.setProperty("drools.dateformat", "yyyy-MM-dd HH:mm");
        KieServices kieServices = KieServices.Factory.get();
        KieContainer kieClasspathContainer = kieServices.getKieClasspathContainer();
        KieSession kieSession = kieClasspathContainer.newKieSession();
        kieSession.setGlobal("count", 5);
        ArrayList<String> list = new ArrayList<>();
        list.add("小花");
        kieSession.setGlobal("gList", list);
        Student student1 = new Student();
        student1.setAge(50);
        Student student2 = new Student();
        student2.setAge(50);
        kieSession.insert(student1);
        kieSession.insert(student2);
        
        QueryResults results = kieSession.getQueryResults("query_1");
        System.out.println("查询的结果为："+results.size());
        kieSession.fireAllRules();
        kieSession.dispose();
    }


    @Test
    public void test10() throws InterruptedException {
        System.setProperty("drools.dateformat", "yyyy-MM-dd HH:mm");
        KieServices kieServices = KieServices.Factory.get();
        KieContainer kieClasspathContainer = kieServices.getKieClasspathContainer();
        KieSession kieSession = kieClasspathContainer.newKieSession();
        kieSession.setGlobal("count", 5);
        ArrayList<String> list = new ArrayList<>();
        list.add("小花");
        kieSession.setGlobal("gList", list);
        Student student = new Student();
        student.setName("小米");
        kieSession.insert(student);
        kieSession.fireAllRules();
        kieSession.dispose();
    }

    @Test
    public void test11() throws InterruptedException {
        System.setProperty("drools.dateformat", "yyyy-MM-dd HH:mm");
        KieServices kieServices = KieServices.Factory.get();
        KieContainer kieClasspathContainer = kieServices.getKieClasspathContainer();
        KieSession kieSession = kieClasspathContainer.newKieSession();
        kieSession.setGlobal("count", 5);
        ArrayList<String> list = new ArrayList<>();
        list.add("小花");
        kieSession.setGlobal("gList", list);
        Student student = new Student();
        student.setName("小米");
        kieSession.insert(student);
        kieSession.fireAllRules();
        kieSession.dispose();
    }
}
